package view;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;

import model.Setor;
import model.Usuario;
import control.ControllersDaos;

public class VUsuario extends JFrame {

	
	private static final long serialVersionUID = 8414052752120687113L;
	private JPanel contentPane;
	private JButton btn_novo;
	private JButton btn_Inserir; 
	private JButton btn_Alterar;
	private JButton btn_Excluir;
	private JButton btnCancelar;
	private JLabel lblNome;
	private JLabel lblLogin;
	private JLabel lblTipo;
	private JLabel lblSetor;
	private JLabel lblSenha;
	private JTextField tf_id_usuario;
	private JTextField tf_nome;
	private JTextField tf_login;
	private JPasswordField passwordField_senha;
	private JLabel lbl_Msg;
	private JLabel label;
	private VPrincipal telaAnt;
	private Usuario userAtual;
	private final String[] aTiposUsuario = { "Atendente", "Usuario", "Tecnico","Administrador" };
	private JComboBox<String> cboxTipo;
	private JComboBox<String> cboxSetor;
/*	private SetorCRUD setorTmp = new SetorCRUD();
	private UsuarioCRUD usuarioIn = new UsuarioCRUD();
*/
	private ControllersDaos controller;
	private Usuario usuarioTmp = new Usuario(null);
	private JButton btn_Pesquisar;

	/**
	 * Launch the application.
	 */
	/*
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					VUsuario frame = new VUsuario();
					frame.setVisible(true);
					frame.setLocationRelativeTo(null);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
*/
	private void LimparTela() {
		tf_id_usuario.setText("");
		tf_login.setText("");
		tf_nome.setText("");
		lbl_Msg.setText("");
		passwordField_senha.setText("");

		cboxSetor.removeAllItems();
		cboxTipo.removeAllItems();
		btnCancelar.setVisible(false);
		btnCancelar.setSelected(false);
		contentPane.remove(btnCancelar);

	}

	private void AtivarCampoBotao() {
		tf_id_usuario.setEnabled(true);
		tf_login.setEnabled(true);
		tf_nome.setEnabled(true);
		passwordField_senha.setEnabled(true);
		btn_Alterar.setEnabled(true);
		btn_Inserir.setEnabled(true);
		btn_novo.setEnabled(true);
		btn_Pesquisar.setEnabled(true);
		btn_Excluir.setEnabled(true);

	}

	private void BloquearCampos() {
		tf_id_usuario.setEnabled(true);
		tf_login.setEnabled(false);
		tf_nome.setEnabled(false);
		btn_Alterar.setEnabled(false);
		btn_Inserir.setEnabled(false);
		btn_Excluir.setEnabled(false);
		passwordField_senha.setEnabled(false);
		btn_novo.setEnabled(true);
		btn_Pesquisar.setEnabled(true);

	}

	/**
	 * Create the frame.
	 */

	public VUsuario(VPrincipal telaAnterior, Usuario user, ControllersDaos controlador) {
		this();
		this.setLocationRelativeTo(null);
		this.setResizable(false);
		telaAnt    = telaAnterior;
		userAtual  = user;
		controller = controlador;
	}

	private VUsuario() {
		addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosed(WindowEvent arg0) {
				telaAnt.setVisible(true);
			}
		});
		setTitle("Cadastro de Usu\u00E1rio");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 500, 360);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		btn_novo = new JButton("Novo");
		btn_novo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					 if(userAtual.getType().equalsIgnoreCase(aTiposUsuario[3])){

					tf_id_usuario.setText(String.valueOf(controller //usuarioIn
							.proximoIdUsuario()));
					// Preencher a lista com os setores cadastrados.
					ArrayList<Setor> listSetor = new ArrayList<Setor>();
					//listSetor = setorTmp.listarSetor();
					listSetor = controller.listarSetor();
					cboxSetor.removeAllItems();
					for (Setor setor : listSetor) {
						cboxSetor.addItem(setor.getId() + " - "
								+ setor.getNome().toUpperCase());
					}
					for (int i = 0; i < aTiposUsuario.length; i++) {
						cboxTipo.addItem(aTiposUsuario[i]);
					}

					AtivarCampoBotao();
					AtivarBtnCancelar();
					btn_Pesquisar.setEnabled(false);
					btn_novo.setEnabled(false);
					btn_Excluir.setEnabled(false);
					btn_Alterar.setEnabled(false);
					tf_id_usuario.setEnabled(false);

					 } else {
					 lbl_Msg.setText("Usu�rio sem Permiss�o para incluir novos usu�rios");
					 }
				} catch (ClassNotFoundException ex) {
					lbl_Msg.setText("Problema interno : " + ex.getMessage());

				} catch (SQLException ex) {
					lbl_Msg.setText("Problema interno : " + ex.getMessage());
				} catch (NullPointerException ex) {
					lbl_Msg.setText("Usu�rio sem Permiss�o para incluir novos usu�rios");
				}

			}
		});
		btn_novo.setIcon(new ImageIcon(VUsuario.class
				.getResource("/imagens/Novo.jpg")));
		btn_novo.setMnemonic(KeyEvent.VK_N);
		btn_novo.setHorizontalAlignment(SwingConstants.LEFT);
		btn_novo.setFont(new Font("Tahoma", Font.BOLD, 11));
		btn_novo.setBounds(10, 277, 89, 34);
		contentPane.add(btn_novo);

		btn_Inserir = new JButton("Inserir");
		btn_Inserir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				String campoID = tf_id_usuario.getText().trim();
				String campoNome = tf_nome.getText().trim();
				String campoLogin = tf_login.getText().trim();
				String campoTipo = cboxTipo.getSelectedItem().toString().trim();
				String[] s = cboxSetor.getSelectedItem().toString().trim()
						.split(" - ");
				String campoSetor = s[0];
				String campoSenha = new String(passwordField_senha
						.getPassword());

				int nID, nSetor;

				if (campoID == null || campoID.equals("") || campoNome == null
						|| campoNome.equals("") || campoLogin == null
						|| campoLogin.equals("") || campoTipo == null
						|| campoTipo.equals("") || campoSetor == null
						|| campoSetor.equals("") || campoSenha == null
						|| campoSenha.equals(""))

				{
					lbl_Msg.setText("Verifique todos os campos");
				} else {
					try {

						nID = Integer.parseInt(campoID);
						nSetor = Integer.parseInt(campoSetor);
						usuarioTmp = new Usuario(nID, campoNome, campoTipo,
								campoLogin, campoSenha,nSetor);

						//usuarioIn.inserirUsuario(usuarioTmp);
						controller.inserirUsuario(usuarioTmp);
						JOptionPane.showMessageDialog(null,
								"Usu�rio Cadastrado Com SUCESSO!!", "Cadastro",
								JOptionPane.INFORMATION_MESSAGE);

						LimparTela();
						BloquearCampos();
					} catch (NumberFormatException ex) {
						lbl_Msg.setText("Problema no Casdastro do Usu�rio, Verifique os Campos: "
								+ ex.getMessage());
					} catch (ClassNotFoundException ex) {
						lbl_Msg.setText("Problema no Casdastro do Usu�rio: "
								+ ex.getMessage());
					} catch (SQLException ex) {
						lbl_Msg.setText("Problema no Casdastro do Usu�rio no Banco: "
								+ ex.getMessage());
					}
				}

			}
		});
		btn_Inserir.setMnemonic(KeyEvent.VK_C);
		btn_Inserir.setFont(new Font("Tahoma", Font.BOLD, 11));
		btn_Inserir.setEnabled(false);
		btn_Inserir.setBounds(168, 277, 89, 34);
		contentPane.add(btn_Inserir);

		btn_Alterar = new JButton("Alterar");
		btn_Alterar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				String campoID = tf_id_usuario.getText().trim();
				String campoNome = tf_nome.getText().trim();
				String campoLogin = tf_login.getText().trim();
				String campoTipo = cboxTipo.getSelectedItem().toString().trim();
				String[] s = cboxSetor.getSelectedItem().toString().trim()
						.split(" - ");
				String campoSetor = s[0];
				String campoSenha = new String(passwordField_senha
						.getPassword());

				int nID, nSetor;

				if (campoID == null || campoID.equals("") || campoNome == null
						|| campoNome.equals("") || campoLogin == null
						|| campoLogin.equals("") || campoTipo == null
						|| campoTipo.equals("") || campoSetor == null
						|| campoSetor.equals("") || campoSenha == null
						|| campoSenha.equals(""))

				{
					lbl_Msg.setText("Verifique todos os campos");
				} else {
					try {

						nID = Integer.parseInt(campoID);
						nSetor = Integer.parseInt(campoSetor);
						usuarioTmp = new Usuario(nID, campoNome, campoTipo,
								campoLogin, campoSenha,nSetor);

						//usuarioIn.alterarUsuario(usuarioTmp);
						controller.alterarUsuario(usuarioTmp);
						JOptionPane.showMessageDialog(null,
								"Usu�rio Alterado Com SUCESSO!!", "Cadastro",
								JOptionPane.INFORMATION_MESSAGE);

						LimparTela();
						BloquearCampos();
					} catch (NumberFormatException ex) {
						lbl_Msg.setText("Problema na Altera��o do Usu�rio, Verifique os Campos: "
								+ ex.getMessage());
					} catch (ClassNotFoundException ex) {
						lbl_Msg.setText("Problema na Altera��o do Usu�rio: "
								+ ex.getMessage());
					} catch (SQLException ex) {
						lbl_Msg.setText("Problema na Altera��o do Usu�rio no Banco: "
								+ ex.getMessage());
					}
				}

			}
		});
		btn_Alterar.setMnemonic(KeyEvent.VK_A);
		btn_Alterar.setFont(new Font("Tahoma", Font.BOLD, 11));
		btn_Alterar.setEnabled(false);
		btn_Alterar.setBounds(267, 277, 89, 34);
		contentPane.add(btn_Alterar);

		btn_Excluir = new JButton("Excluir");
		btn_Excluir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				String campoID = tf_id_usuario.getText().trim();
				int nID;
				
				try {

					nID = Integer.parseInt(campoID);
					usuarioTmp.setId(nID);
					//usuarioIn.deletarUsuario(usuarioTmp);
					controller.deletarUsuario(usuarioTmp);
					JOptionPane.showMessageDialog(null, "Usu�rio Exclu�do Com SUCESSO!!","Cadastro",JOptionPane.INFORMATION_MESSAGE);

					LimparTela();
					BloquearCampos();
				} catch (NumberFormatException ex) {
					lbl_Msg.setText("Problema na Exclus�o do Usu�rio, Verifique os Campos: "
							+ ex.getMessage());
				} catch (ClassNotFoundException ex) {
					lbl_Msg.setText("Problema na Exclus�o do Usu�rio: "
							+ ex.getMessage());
				} catch (SQLException ex) {
					lbl_Msg.setText("Problema na Exclus�o do Usu�rio no Banco: "
							+ ex.getMessage());
				}
			}
		});
		btn_Excluir.setIcon(new ImageIcon(VUsuario.class
				.getResource("/imagens/excluir.jpg")));
		btn_Excluir.setFont(new Font("Tahoma", Font.BOLD, 11));
		btn_Excluir.setEnabled(false);
		btn_Excluir.setBounds(366, 277, 107, 34);
		contentPane.add(btn_Excluir);

		btn_Pesquisar = new JButton("Pesquisar");
		btn_Pesquisar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				boolean encontrou = false;
				lbl_Msg.setText("");
				cboxTipo.removeAllItems();
				cboxSetor.removeAllItems();
				String campoID = tf_id_usuario.getText().trim();
				ArrayList<Usuario> listUsuario = new ArrayList<Usuario>();
				ArrayList<Setor> listSetor = new ArrayList<Setor>();
						
				if (campoID == null || campoID.equals("")) {
					lbl_Msg.setText("Informe um Id do Usu�rio para Pesquisar");
				} else if (userAtual.getType().equalsIgnoreCase(aTiposUsuario[3])) { // Se for Administrador
					try {
						int nID = Integer.parseInt(campoID);
						//listUsuario = usuarioIn.listarUsuario();
						listUsuario = controller.listarUsuario();
						for (Usuario userTmp : listUsuario) {
							if (nID == userTmp.getId()) {
								tf_id_usuario.setText(userTmp.getId() + "");
								tf_login.setText(userTmp.getLogin());
								tf_nome.setText(userTmp.getName());
								cboxTipo.addItem(userTmp.getType());
								lbl_Msg.setText("Obs.: Setor Atual: "
										+ userTmp.getSector_id()+". Tipo Atual: "+userTmp.getType());

								encontrou = true;

							}
						}
						if (encontrou) {
							AtivarCampoBotao();
							//listSetor = setorTmp.listarSetor();
							listSetor = controller.listarSetor();
							for (Setor setor : listSetor) {
								cboxSetor.addItem(setor.getId() + " - "
										+ setor.getNome().toUpperCase());
							}

							cboxTipo.removeAllItems();
							for (int i = 0; i < aTiposUsuario.length; i++) {
								cboxTipo.addItem(aTiposUsuario[i]);
							}

							btn_Pesquisar.setEnabled(false);
							btn_novo.setEnabled(false);
							btn_Inserir.setEnabled(false);

							AtivarBtnCancelar();

						} else {
							lbl_Msg.setText("Nenhum Registro Encontrado!");
						}

					} catch (NumberFormatException ex) {
						lbl_Msg.setText("Problema na Pesquisa do Usu�rio: "
								+ ex.getMessage());
					} catch (ClassNotFoundException ex) {
						lbl_Msg.setText("Problema na Pesquisa do Usu�rio: "
								+ ex.getMessage());
					} catch (SQLException ex) {
						lbl_Msg.setText("Problema na Pesquisa do Usu�rio: "
								+ ex.getMessage());
					}

				}else{ // usu�rio N�O Administrador
					try {
						int nID = Integer.parseInt(campoID);
						//listUsuario = usuarioIn.listarUsuario();
						listUsuario = controller.listarUsuario();
						cboxSetor.removeAllItems();
						cboxTipo.removeAllItems();
						for (Usuario userTmp : listUsuario) {
							if (nID == userTmp.getId()) {
								tf_id_usuario.setText(userTmp.getId() + "");
								tf_login.setText(userTmp.getLogin());
								tf_nome.setText(userTmp.getName());
								cboxTipo.addItem(userTmp.getType());

								//listSetor = setorTmp.listarSetor();
								listSetor = controller.listarSetor();
								for (Setor setor : listSetor) {
									if (userTmp.getSector_id() == setor.getId()){
										cboxSetor.addItem(setor.getId() + " - "
												+ setor.getNome().toUpperCase());	
									}
									
								}

								encontrou = true;

							}
						}
						if (encontrou) {

							AtivarBtnCancelar();
							btn_Pesquisar.setEnabled(false);
							
						} else {
							lbl_Msg.setText("Nenhum Registro Encontrado!");
						}

					} catch (NumberFormatException ex) {
						lbl_Msg.setText("Problema na Pesquisa do Usu�rio: "
								+ ex.getMessage());
					} catch (ClassNotFoundException ex) {
						lbl_Msg.setText("Problema na Pesquisa do Usu�rio: "
								+ ex.getMessage());
					} catch (SQLException ex) {
						lbl_Msg.setText("Problema na Pesquisa do Usu�rio: "
								+ ex.getMessage());
					}

				}
			}

		});
		btn_Pesquisar.setIcon(new ImageIcon(VUsuario.class
				.getResource("/imagens/Pesquisar.png")));
		btn_Pesquisar.setFont(new Font("Tahoma", Font.BOLD, 11));
		btn_Pesquisar.setBounds(336, 11, 137, 34);
		contentPane.add(btn_Pesquisar);

		JLabel lbl_ID = new JLabel("ID Usu\u00E1rio");
		lbl_ID.setFont(new Font("Trebuchet MS", Font.BOLD, 12));
		lbl_ID.setBounds(10, 20, 57, 15);
		contentPane.add(lbl_ID);

		lblNome = new JLabel("Nome");
		lblNome.setFont(new Font("Trebuchet MS", Font.BOLD, 12));
		lblNome.setBounds(10, 87, 89, 15);
		contentPane.add(lblNome);

		lblLogin = new JLabel("Login");
		lblLogin.setFont(new Font("Trebuchet MS", Font.BOLD, 12));
		lblLogin.setBounds(10, 146, 89, 15);
		contentPane.add(lblLogin);

		lblTipo = new JLabel("Tipo");
		lblTipo.setFont(new Font("Trebuchet MS", Font.BOLD, 12));
		lblTipo.setBounds(168, 21, 89, 15);
		contentPane.add(lblTipo);

		lblSetor = new JLabel("Setor");
		lblSetor.setFont(new Font("Trebuchet MS", Font.BOLD, 12));
		lblSetor.setBounds(239, 87, 89, 15);
		contentPane.add(lblSetor);

		lblSenha = new JLabel("Senha");
		lblSenha.setFont(new Font("Trebuchet MS", Font.BOLD, 12));
		lblSenha.setBounds(168, 147, 89, 15);
		contentPane.add(lblSenha);

		tf_id_usuario = new JTextField();
		tf_id_usuario.setBounds(10, 41, 86, 20);
		contentPane.add(tf_id_usuario);
		tf_id_usuario.setColumns(10);

		tf_nome = new JTextField();
		tf_nome.setBounds(10, 104, 197, 20);
		contentPane.add(tf_nome);
		tf_nome.setColumns(10);

		tf_login = new JTextField();
		tf_login.setBounds(10, 170, 86, 20);
		contentPane.add(tf_login);
		tf_login.setColumns(10);

		cboxSetor = new JComboBox<String>();
		cboxSetor.setBounds(239, 104, 186, 20);
		contentPane.add(cboxSetor);

		cboxTipo = new JComboBox<String>();
		cboxTipo.setBounds(168, 41, 137, 20);
		contentPane.add(cboxTipo);

		passwordField_senha = new JPasswordField();
		passwordField_senha.setBounds(168, 170, 137, 20);
		contentPane.add(passwordField_senha);

		lbl_Msg = new JLabel("* Campo num\u00E9rico");
		lbl_Msg.setFont(new Font("Trebuchet MS", Font.BOLD, 11));
		lbl_Msg.setHorizontalAlignment(SwingConstants.LEFT);
		lbl_Msg.setForeground(Color.RED);
		lbl_Msg.setBounds(10, 201, 464, 65);
		contentPane.add(lbl_Msg);

		label = new JLabel("*");
		label.setForeground(Color.RED);
		label.setBounds(77, 21, 11, 14);
		contentPane.add(label);
		BloquearCampos();
	}

	private void AtivarBtnCancelar() {
		btnCancelar = new JButton("Cancelar");
		btnCancelar.setBounds(385, 175, 89, 23);
		contentPane.add(btnCancelar); // ativa o cancelar
		btnCancelar.setSelected(true);
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				LimparTela();
				BloquearCampos();

			}
		});
	}
}
